package lq89;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;
/*
lq89
输入：
4
2 4 3 4
4 3 3 3
输出：
0 4 5 1 2 3 7 11 10 9 13 14 15
 */
public class Main {
    static int[] bei; //北边箭靶计数
    static int[] xi;  //西边箭靶计数
    static int[][] step = {{-1,0},{0,1},{1,0},{0,-1}}; //四个方向的坐标偏移
    static int n;
    static Deque<Integer> res; //ans或res表示结果
    static int[][] vis; //标记走过的格子
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        n=sc.nextInt();
        vis=new int[n][n];
        bei=new int[n];
        xi=new int[n];
        res = new LinkedList<Integer>();
        for(int i=0;i<n;i++) {
            xi[i]=sc.nextInt();
        }
        for(int i=0;i<n;i++) {
            bei[i]=sc.nextInt();
        }
        //第一个格子必走，直接标记然后再开始dfs
        bei[0]--;
        xi[0]--;
        vis[0][0]=1;
        res.add(0);
        dfs(0, 0); //检查（0，0）格子，遍历下一步格子
        
    }
    static void dfs(int x,int y) {
        //判断到终点没
    	if (x==n-1&&y==n-1) {
            //如果箭没拔完，放弃当前结果
            for(int i=0;i<n;i++) {
                if (bei[i]!=0||xi[i]!=0) {
                    return;
                }
            }
            //找到正确路径，输出
            while(res.size()!=0)
            	System.out.printf("%d ",res.pollFirst());
            
            return;
        }
        for(int i=0;i<step.length;i++) {
        	//下一步的四个方向
            int x1=x+step[i][0];
            int y1=y+step[i][1];
            //检查坐标是否在地图内且格子没访问过
            if (x1>=0&&y1>=0&&x1<n&&y1<n&&vis[x1][y1]==0) {
            	//标记这一步状态
            	vis[x1][y1]=1;
            	bei[x1]--;
            	xi[y1]--;
            	res.addLast((x1*n)+y1);
            	//如果出现负数箭靶则放弃当前路径
            	if (bei[x1]>=0&&xi[y1]>=0) {
            		dfs(x1, y1);
            	}
            	//回溯这一步状态
                res.pollLast();
                vis[x1][y1]=0;
                bei[x1]++;
                xi[y1]++;
            }
        }
    }
}